package com.itheima;

import com.itheima.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/*
引用类型属性注入
    @Autowired:
        类型：属性注解
        位置：属性定义上方，方法定义上方
        作用:
            使用在字段上用于根据类型依赖注入。自动按照类型注入。当使用注解注入属性时，set 方法可以省略。它只能注入其他 bean 类型。
        先按照数据类型注入,若只有一个,直接注入成功。
        当有多个类型匹配时，使用要注入的对象变量名称作为 bean 的 id，在 spring 容器查找，找到了也可以注入成功。找不到就报错
    @Qualifier:
        类型：属性注解
        位置：属性定义上方，方法定义上方
        作用:
            结合@Autowired一起使用用于根据名称进行依赖注入。
        结合@Autowired一起使用用于根据名称进行依赖注入。<br/>在自动按照类型注入的基础之上，再按照 Bean 的 id 注入。
        它在给字段注入时不能独立使用，必须和@Autowire 一起使用；但是给方法参数注入时，可以独立使用。

    @Primary
        类型：类注解
        位置：类定义上方
        作用：设置类对应的bean按类型装配时优先装配
 */
public class App {

    public static void main(String[] args) {
        //1. 获取核心容器对象
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2. 获取Service
        AccountService service = (AccountService) app.getBean("accountService");
        service.save();
    }
}
